<html>
<head>
<link rel="stylesheet" href="page.css" type="text/css">
<title>Adie</title>
</head>
<body bgcolor=#ffffff link=#990033 vlink=#990033 alink=#990033 text=#000000>

<!---- TOPIC TITLE WITH LOGO--->
<table border=0 cellpadding= cellspacing=2 width=100% ><tr><td><a href='http://www.fox-toolkit.org' target=_top><img src='art/foxlogo_small.jpg' border=0></a></td><td width=100% valign=bottom id="HEADLINE"><b>
Adie  <A href='adie.html' target="_top" align=left><font  size=-2>[Remove Frame]</font></a>
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
<p>
<!--- TOPIC TITLE WITH LOGO --->


<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Screenshots
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
<IMG src='screenshots/adie.gif' alt='mainwindow'>
</ul>


<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Where to get it?
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
  Adie can be downloaded from the download page either as a Linux or as Win32 Binary (both statically linked with FOX). The source code for Adie can be found in the FOX distribution. Adie is GPL Licensed.
</ul>




<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Introduction
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
  Adie is an extremely fast and convenient programming text editor written using the FOX Toolkit.<BR>
  Besides being a nice text editor, Adie is also an extremely convenient file viewer, supporting a plethora of methods to move from one file to the next.<BR>
  For each visited file, Adie remembers where in that file you were last looking, and which special places in that file have been bookmarked, so you can quickly return to frequently visited places.<BR>
  Project browsing is made easy by optionally displaying a File/Directory browser side by side with the text so files may be visited by means of a single click.  Files may also be opened simply by highlighting a file name, compiler warning message, or #include directive and hitting a single button; Adie will search for the file in the same directory as an already loaded file, or in a number of predefined directories (like for example include directories).<BR>
</ul>

<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
General Features
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
  <LI>Preferences are configurable with convenient dialogs.</LI>
  <LI>Text size only limited by available memory.</LI>
  <LI>Persistent bookmarks may be set for each file.</LI>
  <LI>Persistent scroll position is remembered for each visited file.</LI>
  <LI>Wheel mouse scroll support.</LI>
  <LI>Online help built in.</LI>
  <LI>Now supports multiple toplevel edit windows.</LI>
</ul>


<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
File Access Features
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
  <LI>File Dialog supporting bookmarked directories.</LI>
  <LI>Dropping a file into Adie opens the file.</LI>
  <LI>Single-click access to file using File/Directory browser.</LI>
  <LI>Visit recently edited files.</LI>
  <LI>Jump to file and line number of highlighted compiler warnings or errors.</LI>
  <LI>Customizable list of file patterns; show only source files, for example.</LI>
  <LI>Open a file by highlighting a #include directive.</LI>
  <LI>Customizable list of directories to search for header files.</LI>
  <LI>Detect if file changed outside of editor to prevent accidental overwriting.</LI>
</ul>



<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Editing Features
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
  <LI>Unlimited undo/redo capability.</LI>
  <LI>Cut and paste to clipboard support.</LI>
  <LI>X11 primary selection support using middle-mouse paste.</LI>
  <LI>Drag-and-drop support for text move or copy.</LI>
  <LI>Brace matching, statement block, and expression block selection.</LI>
  <LI>Up to 10 persistent bookmarks may be set in each file.</LI>
  <LI>Search and replace history is stored persistently.</LI>
  <LI>Auto-indent feature.</LI>
  <LI>Strip trailing spaces, strip carriage-returns for DOS files.</LI>
  <LI>Automatically add newline after last line.</LI>
  <LI>Indent or unindent selected text; clean indentation.</LI>
  <LI>Search for highlighted text.</LI>
  <LI>Goto line number, goto highlighted line number, goto matching brace, goto begin/end of block.</LI>
  <LI>Fixed word wrap column, or continuous word wrap mode.</LI>
  <LI>Mouse wheel or right-mouse scroll support.</LI>
  <LI>Customizable word-delimiters to select words by double-clicks.</LI>
  <LI>Insert files or extract highlighted text to file.</LI>
</ul>



<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Syntax Coloring Features.
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
  <LI>Syntax coloring is programmable, using PERL-like regular expressions.</LI>
  <LI>Patterns now read in from external file; standard set of patterns is
  provided for common programming languages.</LI>
  <LI>Automatically determine syntax based on either file extensions or file contents.</LI>
  <LI>Text styles including foreground, background, selection colors, as well as underlining and strike-throughs.</LI>
  <LI>Text styles can be interactively modified from preferences dialog.</LI>
  <LI>Color fallback mechanism to minimize style setup hassles.</LI>
</ul>



<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Starting a New Document.
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
To start a new document, invoke the New menu, or press on the New button on the toolbar.
If the current document has not yet been saved, you will be prompted to either save or
abandon the current text.
</ul>




<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Opening and Saving Files the Old Fashioned Way.
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
  To open a file, you can invoke the Open menu, or press on the Open button on the toolbar.
  This will bring up the standard File Dialog, which allows you to select a file. To save a file,
  you can either invoke the Save or the Save As menu option. The former saves the file back to
  the same filename, while the latter prompts for an alternative filename.
  <p>
  You can quickly navigate to the desired file by typing the first few letters of the filename and
  then pressing Enter (Return); use Backspace to move up one directory level. Control-H moves
  to your home directory, Control-W moves back to the current working directory.
  <p>
  A nice convenience of the File Dialog is the ability to set bookmarks, so once bookmarked,
  you can quickly move back to a previously visited directory.
</ul>

<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Opening Files Using the File/Directory Browser.
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
  An alternative method to open files is the File/Directory Browser. You can display the
  File/Directory Browser by invoking the File Browser option under the View menu.
  To open a file using the File/Directory Browser, simply click on the file. If there are
  many files, you may want to limit  the number of files displayed by specifying a file pattern
  in the Filter typein field. The pattern is can be any regular file wildcard expression
  such as "*.cpp". By default, the File/Directory Browser shows all files, i.e. the pattern
  is "*". You can switch patterns by means of the combo box under file File Browser; additional
  patterns for the combo box (and File Dialog)  can be specified in the Preferences Dialog.
</ul>


<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Opening Recently Visited Files.
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
  The recent file menu shows files which have been recently visited.  You can quickly get
  back to a file you've been editing simply by selecting one of these recent files.
</ul>

<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Opening Files by Drag and Drop.
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
  Using a file browser such as PathFinder or other Konqueror or other XDND compatible file
  browsers, you can simply drop a file into the text pane and have Adie read this file. Of course,
  the File/Directory browser supports drag and drop also, so you can also drag a file from the
  File/Directory browser into the Text Window.
</ul>


<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Opening a Selected Filename.
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
<p>
<!--- TOPIC TITLE -->
<ul>
  Selecting any filename, possibly in another application, and invoking the "Open Selected"
  option causes Adie to open the selected file. When the selected filename is of the form:
  <p>
   #include "filname.h"
  <p>
  or:
  <p>
   #include <filename.h>
  <p>
  then Adie will search for this file in a sequence of include directories, otherwise it will
  search in the same directory as the currently loaded file. You can specify the list of
  include directories to search with the "Include Path" option. When the selected filename is
  of the form:
  <p>
   filename.cpp:177
  <p>
  then Adie will not only load the filename, but also jump to the given line number.  If this
  file has already been loaded, Adie will simply jump to the given  line number in the current file.
  This option is very useful when fixing compiler errors.
</ul>


<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Mouse Selection.
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
  You can move the cursor by simply clicking on the desired location with the left mouse
  button. To highlight some text, press the mouse and drag the mouse while holding the left
  button. To select text a word at a time, you can double-click and drag; to select text a
  line at a time, you can triple-click and drag. Performing a shift-click extends the selection
  from the last cursor location to the current one. When selecting words, words are considered
  to extend from the clicked position up to a blank or word-delimiting character. The latter
  may depend on the programming language, and so Adie offers a way to  change the set of delimiter
  characters.
</ul>

<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Scrolling Text.
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
  Using the right mouse button, you can grab the text and scroll it. a right mouse drag is a
  very convenient way to scroll the text buffer by small amount as the scrolling is exactly
  proportional to the mouse movement. You can of course also use the scroll bars.  Because
  scrolling becomes awkward when dealing with large amounts of text, you can do a fine scroll
  or vernier-scroll by holding the shift or control keys while moving the scroll bars.
  <p>
  Adie can also take advantage of a wheel mouse; simply point the mouse inside the text area
  and use the wheel to scroll it up and down.  Holding the Control-key while operating the wheel
  makes the scrolling go faster, by smoothly scrolling one page at a time.  To scroll horizontally,
  simply point the mouse at the horizontal scroll bar. In fact, any scrollable control (including
  the File/Directory Browser), can be scrolled by simply pointing the cursor over it and using the
  mouse wheel. You can adjust the number of lines scrolled for each wheel notch by means of the
  Preferences dialog.
</ul>


<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
The Clipboard.
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
  After selecting some text, you can cut or copy this text to the clipboard. A subsequent paste
  operation will then insert the contents of the clipboard at the current cursor location. If some
  text has been selected in another application, then you can paste this text by placing the cursor at the
  right spot in your text and invoking the paste command.
</ul>


<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
The Primary Selection
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
  When text is selected anywhere (possibly in another application), Adie can paste this text into
  the current text buffer by means of the middle mouse button or by pressing the wheel-button if
  you have a wheel mouse.  Note that while holding the button, the insertion point can be moved by
  moving the mouse:- Adie will only insert the text when you release the button.
</ul>


<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Text Drag and Drop.
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
  After selecting some text, you can drag this text to another location by pressing the middle
  mouse button; because Adie is fully drag and drop enabled, you can not only drag a selection
  from one place to another inside the text buffer, but also between different Adie applications,
  or even from Adie to another drag and drop enabled application or vice-versa. Within the same text window,
  the drag defaults to a text-movement.  You can change this to a text copy by holding down the
  Control key while you're dragging. Between one text window and another, the drag defaults to a
  copy operation you can change this to a text movement by holding down the Shift key while dragging.
</ul>


<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Undo and Redo.
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
  Adie support unlimited (well, the limit is large...) undo and redo capability.  Each time
  you insert, remove, or replace some text, Adie remembers what you did. If you make a mistake,
  you can undo the last command, and the one before that, and so on. Having invoked undo many
  times, it is sometimes desirable to invoke the redo command, i.e. to perform the original
  editing operation again.  Thus, you can move backward or forward in time. However if, after undoing
  several commands, you decide edit the buffer in a different way, then you will no longer be
  able to redo the undone commands:- you have now taken a different path. When you first load a file,
  or just after you save it, Adie remembers that this version of the text was special; while subsequent
  editing commands can be undone individually, you can always quickly return to this
  special version of the text by means of the revert command.
</ul>

<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Search and Replace.
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
  Adie uses the standard Search Dialog for searching strings. The search dialog offersforward and
  backward searches (relative to the current cursor location), and three search modes:

  <ul>
    <li>Exact.<br>In the Exact mode, a search looks for a verbatim occurrence of the search string in the text.</li>
    <br>
    <li>Ignore Case.<br>In the Ignore Case mode, a search looks for a verbatim occurrence also, but while disregarding the uppercase/lowercase distinctions.</li>
    <br>
    <li>Expression.<br>In the Expression mode, the the search performs a full regular expression match. The regular expression syntax being used is very similar to PERL and is as follows:
<p><ul>
<table border=1>
<tr><td>  ^	        </td><td>Match begin of line</td></tr>
<tr><td>  $	        </td><td>Match end of line</td></tr>
<tr><td>  .	        </td><td>Match any character</td></tr>
<tr><td>  |	        </td><td>Alternation</td></tr>
<tr><td>  ( ... )	  </td><td>Grouping sub pattern</td></tr>
<tr><td>  (?i ... )	</td><td>Match sub pattern case insensitive</td></tr>
<tr><td>  (?I ... )	</td><td>Match sub pattern case sensitive</td></tr>
<tr><td>  (?n ... )	</td><td>Match sub pattern with newlines</td></tr>
<tr><td>  (?N ... )	</td><td>Match sub pattern with no newlines</td></tr>
<tr><td>  (?: ... )	</td><td>Non-capturing parentheses</td></tr>
<tr><td>  (?= ... )	</td><td>Zero width positive lookahead</td></tr>
<tr><td>  (?! ... )	</td><td>Zero width negative lookahead</td></tr>
<tr><td>  []	      </td><td>Character class</td></tr>
<tr><td><br></td><td><br></td></tr>
<tr><td>  *	        </td><td>Match 0 or more [greedy]</td></tr>
<tr><td>  +	        </td><td>Match 1 or more [greedy]</td></tr>
<tr><td>  ?	        </td><td>Match 0 or 1 [greedy]</td></tr>
<tr><td>  {}	      </td><td>Match 0 or more [greedy]</td></tr>
<tr><td>  {n}	      </td><td>Match n times [greedy]</td></tr>
<tr><td>  {,m}	    </td><td>Match no more than m times [greedy]</td></tr>
<tr><td>  {n,}	    </td><td>Match n or more [greedy]</td></tr>
<tr><td>  {n,m}	    </td><td>Match at least n but no more than m times [greedy]</td></tr>
<tr><td><br></td><td><br></td></tr>
<tr><td>  *?	      </td><td>Match 0 or more [lazy]</td></tr>
<tr><td>  +?	      </td><td>Match 1 or more [lazy]</td></tr>
<tr><td>  ??	      </td><td>Match 0 or 1 [lazy]</td></tr>
<tr><td>  {}?	      </td><td>Match 0 or more times [lazy]</td></tr>
<tr><td>  {n}?	    </td><td>Match n times [lazy]</td></tr>
<tr><td>  {,m}?	    </td><td>Match no more than m times [lazy]
<tr><td>  {n,}?	    </td><td>Match n or more [lazy]</td></tr>
<tr><td>  {n,m}?	  </td><td>Match at least n but no more than m times [lazy]</td></tr>
<tr><td><br></td><td><br></td></tr>
<tr><td>  \a	      </td><td>Alarm, bell</td></tr>
<tr><td>  \e	      </td><td>Escape character</td></tr>
<tr><td>  \t	      </td><td>Tab</td></tr>
<tr><td>  \f	      </td><td>Form feed</td></tr>
<tr><td>  \n	      </td><td>Newline</td></tr>
<tr><td>  \r	      </td><td>Return</td></tr>
<tr><td>  \v	      </td><td>Vertical tab</td></tr>
<tr><td>  \cx	      </td><td>Control character</td></tr>
<tr><td>  \033	    </td><td>Octal</td></tr>
<tr><td>  \x1b	    </td><td> Hex</td></tr>
<tr><td>  \w	      </td><td>Word character [a-zA-Z_0-9]</td></tr>
<tr><td>  \W	      </td><td>Non-word character</td></tr>
<tr><td>  \l	      </td><td>Letter [a-zA-Z]</td></tr>
<tr><td>  \L	      </td><td>Non-letter</td></tr>
<tr><td>  \s	      </td><td>Space</td></tr>
<tr><td>  \S	      </td><td>Non-space</td></tr>
<tr><td>  \d	      </td><td>Digit [0-9]</td></tr>
<tr><td>  \D	      </td><td>Non-digit</td></tr>
<tr><td>  \h	      </td><td>Hex digit [0-9a-fA-F]</td></tr>
<tr><td>  \H	      </td><td>Non-hex digit</td></tr>
<tr><td>  \b	      </td><td>Word boundary</td></tr>
<tr><td>  \B	      </td><td>Word interior</td></tr>
<tr><td>  \u	      </td><td>Single uppercase character</td></tr>
<tr><td>  \U	      </td><td>Single lowercase character</td></tr>
<tr><td>  \p	      </td><td>Punctuation (not including '_')</td></tr>
<tr><td>  \P	      </td><td>Non punctuation</td></tr>
<tr><td>  \<	      </td><td>Begin of word</td></tr>
<tr><td>  \>	      </td><td>End of word</td></tr>
<tr><td>  \A	      </td><td>Match only beginning of string</td></tr>
<tr><td>  \Z	      </td><td>Match only and end of string</td></tr>
<tr><td>  \1...\9	  </td><td>Back reference</td></tr>
</table>
</ul></li>
  </ul>
</ul>


<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Keyboard Bindings.
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
The following table lists the keyboard bindings:
<p>
<table border=1>
<tr><th>Key</th><th>Action</th></tr>
<tr><td>Up	            </td><td>Move cursor up.</td></tr>
<tr><td>Shift+Up	      </td><td>Move cursor up and extend selection.</td></tr>
<tr><td>Down	          </td><td>Move cursor down.</td></tr>
<tr><td>Shift+Down	    </td><td>Move cursor down and extend selection.</td></tr>
<tr><td>Left	          </td><td>Move cursor left.</td></tr>
<tr><td>Shift+Left	    </td><td>Move cursor left and extend selection.</td></tr>
<tr><td>Right	          </td><td>Move cursor right.</td></tr>
<tr><td>Shift+Right	    </td><td>Move cursor right and extend selection.</td></tr>
<tr><td>Home	          </td><td>Move cursor to begin of line.</td></tr>
<tr><td>Shift+Home	    </td><td>Move cursor to begin of line and extend selection.</td></tr>
<tr><td>Ctl+Home	      </td><td>Move cursor to top of text.</td></tr>
<tr><td>End	            </td><td>Move cursor to end of line.</td></tr>
<tr><td>Ctl+End	        </td><td>Move cursor to bottom of text.</td></tr>
<tr><td>Shift+End	      </td><td>Move cursor to end of line and extend selection.</td></tr>
<tr><td>Page Up	        </td><td>Move cursor up one page.</td></tr>
<tr><td>Shift+Page Up	  </td><td>Move cursor up one page and extend selection.</td></tr>
<tr><td>Page Down	      </td><td>Move cursor down one page.</td></tr>
<tr><td>Shift+Page Down	</td><td>Move cursor down one page and extend selection.</td></tr>
<tr><td>Insert	        </td><td>Toggle between insert mode and overstrike mode.</td></tr>
<tr><td>Delete	        </td><td>Delete character after cursor, or text selection.</td></tr>
<tr><td>Back Space	    </td><td>Delete character before cursor, or text selection.</td></tr>
<tr><td>Ctl+A	          </td><td>Select all text.</td></tr>
<tr><td>Ctl+X	          </td><td>Cut selected text to clipboard.</td></tr>
<tr><td>Ctl+C	          </td><td>Copy selected text to clipboard.</td></tr>
<tr><td>Ctl+V	          </td><td>Paste text from clipboard.</td></tr>
</table>
</ul>

<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Changing Font.
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
  <IMG src='screenshots/adie_font.gif' alt='fonts'><p>
  <br>
  You can change font by invoking the Font Selection Dialog from the Font menu. The Font Dialog
  displays four list boxes showing the font Family, Weight, Style, and Size of each font.
  You can narrow down the number of fonts displayed by selecting a specific character set,
  setwidth, pitch, and whether or not scalable fonts are to be listed only. The All Fonts
  checkbutton causes all fonts to be listed. Use this feature if you need to select old-style
  X11 bitmap fonts. The Preview window shows a sample of text in the selected font.
</ul>

<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Changing Preferences.
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
  Since there is no accounting for tastes, Adie can be extensively configured by means of
  the Preferences dialog. The Preferences dialog is comprised of a number of subpanes which
  allow you to change colors, editor modes, file patterns, and word delimiters.
</ul>


<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Changing Colors.
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
  <IMG src='screenshots/adie_colors.gif' alt='colors'><p>
  <br>
  The colors subpane allows you to change the colors used in the File/Directory browser,
  and the Text Window. You can simply drag colors from one color well to another, or you can
  double-click on a color well and bring up the Color Dialog. The Color Dialog offers a
  number of ways to create a new color, either by selecting one of the pre-defined color wells,
  by mixing a custom color in RGB, HSV, or CMYK color space, or by selecting a named color from a list.
  <br>
  The active text line, i.e. the line containing the cursor, can be drawn using a special
  style when the <b>Active background</b> button is checked.
  <br>
  If Line Numbers are displayed, the line numbers and line numbers background can
  also be modified.
</ul>

<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Changing Editor Settings.
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
  <IMG src='screenshots/adie_edit.gif' alt='edit'><p>
  <br>
  The editor subpane is used to change various modes of the editor:
  <P>
<table border=1>
<tr><th>Modes</th><th>Explanation</th></tr>
<tr><td>Word Wrapping.</td><td>This enables word wrapping mode for the Text Window; when word wrapping is turned on, text flowed to stay within the wrap margins. </td></tr>

<tr><td>Auto Indent.</td><td>This causes spaces or tabs to be inserted to match the previous line; this option is meant for programmers.</td></tr>

<tr><td>Fixed Wrap Margin.</td><td>When this feature is enabled, the text is flowed to stay within a fixed wrap column; when disabled, the Text Window is in continuous wrapping mode, and the text is flowed to fit the size of the Text Window.  This option has no effect if the Word Wrapping option is off.</td></tr>

<tr><td>Strip Carriage Returns.</td><td>When this option is selected, MS-Windows/MS-DOS text files with lines ending in CRLF are transformed into LF only files upon read; this is mostly of interest when loading DOS files on a UNIX system; when Adie runs under MS-Windows, files are normally automatically translated back and forth.</td></tr>

<tr><td>Strip Trailing Spaces. </td><td>When selected, Adie will remove all white-space after the last printable character when reading a file.</td></tr>

<tr><td>Append newline at end of file.</td><td>If there is no newline at the end of the last line, automatically add it when writing the file; some compilers like this.</td></tr>

<tr><td>Insert Tab Characters. </td><td>When this option is selected, hard tab characters are inserted when entering the tab key.  If the option is not selected then entering the tab key will insert the corresponding number of spaces into the text buffer.</td></tr>

<tr><td>Warn if changed externally.</td><td>If the file is changed by another program, pop a dialog to reload the file.</td></tr>

<tr><td>Word delimiters.</td><td>Change the set of characters which determine word boundaries for double-click and word-selections.</td></tr>

<tr><td>Wrap Margin.</td><td>This specifies the column at which paragraphs are to be wrapped; the wrap margin only has effect if the fixed wrap margin option is selected.</td></tr>

<tr><td>Tab Columns.</td><td>This specifies the tab spacing, in terms of spaces.</td></tr>

<tr><td>Brace Match Time.</td><td>When entering a brace, parenthesis, or bracket, the cursor temporarily jumps to the matching brace and pauses there for a bit before hopping back to the insert position.  If the brace match time is set to 0, then this feature is disabled.</td></tr>

<tr><td>Mouse Wheel Lines. </td><td>This is the number of lines scrolled when the mouse wheel is rotated by one notch.  When holding the control key while using the wheel, the text scrolls by one page at a time; when holding the alt key, it scrolls one pixel at a time.</td></tr>

<tr><td>Line number columns. </td><td>This is the number of columns shown for line numbers; if set to zero, no line numbers are displayed. .</td></tr>

<tr><td>Save View of File.</td><td>When this option is selected, the current view or scroll position is saved so that a subsequent visit to this file can immediately jump back to the same view. Disabling this option will cause all remembered views to be forgotten.</td></tr>

<tr><td>Save Bookmarks. </td><td>When selected, all currently set bookmarks will be saved for this file; a subsequent visit to this file will restore the bookmarks.  Disabling this option will cause all remembered bookmarks to be forgotten.</td></tr>
</table>
</ul>
<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Changing File Patterns.
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
  This subpane allows you to enter a list of file patterns, one pattern on each line. These patterns are used in the File/Directory browser and the File Dialog.  They are especially useful in the File/Directory browser as it allows you to cause the File/Directory browser to only show those file types you want to see (e.g. only source files).
  Each line of a pattern has the format:
  <p>
     patternname (patternlist)
  <p>
  Where patternname is the name of the pattern (e.g. "C Source") and the patternlist is a comma separated list of patterns (for example "*.h,*.c").
  The patternname is optional.
  Some examples from my own setup of Adie (you can paste these from this help window if you want) are shown below:
  <pre>
  All Files (*)
  All Source (*.cpp,*.cxx,*.cc,*.C,*.c,*.hpp,*.hxx,*.hh,*.H,*.h,*.y,*.l)
  C++ Source Files (*.cpp,*.cxx,*.cc,*.c,*.C)
  C++ Header Files (*.h,*.hpp,*.hxx,*.hh,*.H)
  C Source Files (*.c)
  C Header Files (*.h)
  Python Files (*.py)
  Perl Files (*.pl)
  Ruby Files (*.rb)
  Lex (*.l)
  Yacc (*.y)
  Object (*.o)
  X Pixmap (*.xpm)
  X Bitmap (*.xbm)
  </pre>
  <p>
  Some details on the allowable wild-card patterns:
  <p>
  <table border=1>
  <tr><th>Pattern</th><th>Explanation</th></tr>
  <tr><td>?	</td><td>Matches single character.</td></tr>
  <tr><td>*	</td><td>Matches zero or more characters.</td></tr>
  <tr><td>[abc]	</td><td>Matches a single character, which must be a, b, or c.</td></tr>
  <tr><td>[^abc]	</td><td>Matches a single character, which must be anything other than a, b, or c.</td></tr>
  <tr><td>[!abc]	</td><td>Ditto.</td></tr>
  <tr><td>[a-zA-Z]	</td><td>Matches single character, which must be one of a-z or A-Z.</td></tr>
  <tr><td>[^a-zA-Z]	</td><td>Matches single character, which must be anything other than a-z or A-Z.</td></tr>
  <tr><td>[!a-zA-Z]	</td><td>Ditto.</td></tr>
  <tr><td>pat1|pat2	</td><td>Matches either pat1 or pat2.</td></tr>
  <tr><td>pat1,pat2	</td><td>Ditto.</td></tr>
  <tr><td>(pat1|pat2)	</td><td>Matches either pat1 or pat2; patterns may be nested.</td></tr>
  <tr><td>(pat1,pat2)	</td><td>Ditto.</td></tr>
  </table>
</ul>


<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Building The Syntax File.
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
The syntax file is a file which contains the regular expressions used for coloring
the contents of the text buffer during editing.  When Adie is installed, the syntax
file must be installed in some directory in the <b>$PATH</b> environment variable;
usually, that is the same directory where the executable is installed, e.g. <b>/usr/local/bin</B>.
<p>
The syntax file contains a number of <b>Language</b>-blocks; each language block
contains a number of syntax rules.  Each rule may also contain a subrule.  The
order of the rules inside a Language-block is important; during matching, the
first rule is tried first, then the second, and so on.  With subrules, its the
same way.
<p>
The formal syntax for the syntax file (sic!) is as follows:
<p>
<pre>
SYNTAXFILE      :       { LANGUAGEBLOCK }
                ;

LANGUAGEBLOCK   :       language STRING
                                { DECLARATION }
                                { RULE }
                        end
                ;


DECLARATION     :       filesmatch STRING
                |       contentsmatch STRING
                |       delimiters STRING
                |       contextlines NUMBER
                |       contextchars NUMBER
                ;


RULE            :       rule STRING
                                { PATTERN }
                                { RULE }
                        end
                ;


PATTERN         :       pattern STRING
                |       openpattern  STRING
                |       closepattern  STRING
                |       stoppattern  STRING
                ;


STRING          :       "text"
                ;

NUMBER          :       digits
                ;
</pre>
<p>
In a string, a quote (") can be embedded by prefixing with an backslash (\).
Each statement must be on a single line.  A hash (#) sign is used to introduce
a comment, which extends to the end of the line.
<p>
To determine which language block to use for coloring, Adie first examines
the wildcards in the <b>filesmatch</b> string.  If the filename loaded into
the editor matches the list of wildcards, the language block will be used
for syntax coloring.<br>
Some files don't have any file extensions.  In that case, you can instead
determine which language block to use by matching the first fragment of
the file (typically 512 characters) to the <b>contentsmatch</b> regular
expression.
<p>
Note that the order of the language blocks is important; earlier language
blocks will be tried first.
<p>
The <b>delimiters</b> expression holds the list of characters used as delimiters
when editing files of this syntax.
<p>
When the editor matches patterns for syntax incremental syntax coloring, it needs a
certain amount of context around the change being made to the text.  Typically,
the <b>contextchars</b> should be set to the length of the largest pattern to
be matched.  The <b>contextlines</b> should be set to the number of lines of
context.  If these statements are omitted, Adie assumes the context to be one
line of text.  This is good in most cases.
<p>
Syntax rules are named patterns.  The name of the rule is used to look up the
corresponding colors in the FOX registry (so make sure the names are legal
registry key names!).  Thus, the colors can be easily configurable.
<p>
Rules may be either simple rules or complex rules.  Simple rules match a single
regular expression <b>pattern</b> and have no subrules.
Complex rules have a <b>openpattern</b> and a <b>closepattern</b>, and possibly
a <b>stoppattern</b>.  Complex rules may have any number of subrules.
<br>
The matching process is recursive, depth-first.  That means, when matching
complex rules, first the open pattern is matched, then all of the subrules,
followed by the close pattern and stop pattern [if specified].  This allows
for easy to create subpatterns e.g. backslash-escape codes [see example].
<p>
The patterns are specified using the perl-like regular expressions also
used for search and replace, see above.
<p>
As an example, here is a somewhat simplified version of the C++ language
patterns:
<p>
<pre>
language "C++"

  # File patterns for this language mode
  filesmatch "*.C,*.cpp,*.cc,*.cxx,*.c++,*.H,*.hpp,*.hh,*.h++,*.h"

  # Word delimiters
  delimiters "~.,/\`'!@#$%^&*()-=+{}|[]\":;<>?"

  # C++ style comment
  rule "CPPComment"
    openpattern   "//"          # Start of C++ comment
    closepattern  "$"           # Goes to end of line
  end

  # C style comment
  rule "CComment"
    openpattern   "/\*"         # Note the '\' does not have to be escaped unless followed by "
    closepattern  "\*/"         # CComment pattern is potentially expensive as it can go till end of buffer!
  end

  # String
  rule "String"
    openpattern   "\""          # Opening quotes
    closepattern  "\""          # Closing quotes
    stoppattern   "$"           # Don't scan past end of line!

    rule "OctalEscape"          # Octal character can have more than 1 character;
      pattern     "\\d+"        # that's why this rule MUST come before "ControlEscape"!
    end

    rule "ControlEscape"        # Allow an escape; subrules are matched first
      pattern     "\\."         # so a escaped closing quote is not seen by the "String" rule
    end
  end


  # Char constant
  rule "Char"
    openpattern  "'"
    closepattern "'"
    rule "OctalEscape"
      pattern "\\d+"
    end
    rule "ControlEscape"
      pattern "\\."
    end
  end

  # Preprocessor
  rule "Preprocessor"
    openpattern  "^\s*#"
    closepattern "$"
    rule "PreprocessorContinuation"
      pattern "\\n"
    end
  end

  rule "Keyword"
    pattern     "\<(friend|typename|explicit|typeid|for|while|if|and_so_on)\>"
  end

  rule "Number"
    pattern     "\<((0[xX][0-9a-fA-F]+)|((\d+\.?\d*)|(\.\d+))([eE](\+|-)?\d+)?)\>"
  end

  rule "Type"
    pattern     "\<(unsigned|signed|int|char|short|long|float|double)\>"
  end

  rule "Operator"
    pattern     "(\+\+|\+=|\+|--|-=|->\*|->|-|==|=|&&)"
  end

end
</pre>
</ul>

<!--- TOPIC TITLE -->
<p>
<table width=100% cellpadding=0 cellspacing=2><tr><td width=100% valign=bottom id=HEADLINE><b>
Other Configuration Issues.
<br><img src='art/line.gif' width=100% height=1></b></td></tr></table>
</p>
<!--- TOPIC TITLE -->
<ul>
  Because Adie is an editor written to use the FOX Toolkit, there are various other items, common to all FOX Toolkit programs, which may be configured either by hand or using some other control panel.
  A few items of particular interest are list below:
  <p>
  <pre>
  [SETTINGS]
  typingspeed=800
  clickspeed=400
  scrollspeed=80
  scrolldelay=600
  blinkspeed=500
  animspeed=10
  menupause=400
  tippause=800
  tiptime=3000
  dragdelta=6
  wheellines=1
  bordercolor=black
  basecolor=AntiqueWhite3
  hilitecolor=AntiqueWhite
  shadowcolor=AntiqueWhite4
  backcolor=AntiqueWhite1
  forecolor=black
  selforecolor=AntiqueWhite
  selbackcolor=#aea395
  tipforecolor=yellow
  tipbackcolor=black
  normalfont="[lucidatypewriter] 90 700 1 1 0 1"
  iconpath = /usr/share/icons:/home/jeroen/icons
  </pre>
  <p>
  These settings can be either placed in $HOME/.foxrc (and thus affect all FOX programs), or in $HOME/.foxrc/FoxTest/Adie (only applying to Adie).
  File types may be bound to a command, mime-type, and icons using statements like the one below:
  <p>
  <pre>
  [FILETYPES]
  cpp = "/usr/local/bin/textedit %s &;C++ Source File;c_src.xpm;mini/c_src.xpm"
  /home/jeroen = ";Home Directory;home.xpm;mini/home.xpm;application/x-folder"
  defaultfilebinding = "/usr/local/bin/textedit %s &;Document;document.xpm;mini/document.xpm"
  defaultexecbinding = ";Application;exec.xpm;mini/exec.xpm;application/x-executable-file"
  defaultdirbinding = ";Folder;folder.xpm;mini/folder.xpm;application/x-folder"
  </pre>
  This example shows how the extension ".cpp" is bound to the program "textedit" and is associated with two icons, a big icon "c_src.xpm" and a small icon "mini/c_src.xpm", which are to be found in the directories determined by 'iconpath", in this case, "/usr/share/icons" or "/home/jeroen/icons".
  It also binds two icons "home.xpm" and "mini/home.xpm" to the home directory "/home/jeroen".
  Finally, it assigns icons, commands, and mime-types to unbound documents, executables, and directories, overriding the built-in icons of the FOX Toolkit.
</ul>

<!--- COPYRIGHT -->
<p>
<table width=100% cellpadding=0 cellspacing=0><tr><td width=100% valign=top id=HEADLINE align=right>
<img src='art/line.gif' width=100% height=1><font size=-1>
Copyright &copy; 1997-2005 Jeroen van der Zijp</font>
</td></tr></table>
</p>
<!--- COPYRIGHT -->

</body>
</html>
